<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    // async 函数
    // {
    //     async function fn() {
    //
    //     }
    // }
    // {
    //     const fn = async function () {
    //
    //     }
    // }
    // {
    //     const fn = async () => {
    //
    //     }
    // }
    // {
    //     var arr = [];
    //     arr.map(async function () {
    //
    //     })
    //
    //     setTimeout(async () => {
    //
    //     })
    // }
    // {
    //     const obj = {
    //         async fn(){
    //
    //         },
    //         async run(){
    //
    //         }
    //     }
    // }


    // await 表达式:  必须要放置到async函数中
    // async await 一般 结合 使用，是获取异步行为结果的一种方案。
    // await 必须要放置到async函数中，async函数中可以没有await。
    // await 一般右侧放置的是promise.
    {
        function fn(){
            return new Promise(resolve=>{
                const xhr = new XMLHttpRequest();
                xhr.open("get","./3-面试题.js");
                xhr.send();
                xhr.onload = function(){
                    resolve(xhr.response);
                }
            })
        }
        // fn().then(value=>{
        //     console.log(value);
        // })

        // (async ()=>{
        //     // await:右侧的值如果是promise,那么表达式的结果为该promise的成功值
        //     const result = await fn();
        //     console.log(result);
        //
        // })();
    }

    {
        // 1- async 函数返回的是一个promise实例，实例的状态以及值受async函数的返回值影响
        //      返回值---》参考then->成功与失败的回调返回值
        // async function fn(){
        //     // return 1;
        //     // return Promise.reject(100);
        //     return Promise.resolve(200);
        // }
        // console.log(fn());

    }
    {
        //
        // async function fn(){
        //     // const r = await 1;
        //     // console.log(r);// 1
        //
        //     const r = await Promise.reject(100);
        //     console.log(r);
        //
        // }
        //
        // fn().catch(reason=>{
        //     console.log(reason)
        // })


        async function fn(){
            // const r = await 1;
            // console.log(r);// 1
            try{
                const r = await Promise.reject(100);
                console.log(r);
            }catch (err){
                console.log(err);
            }


        }

        fn()
    }






</script>
</html>